﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace APILocawebGateway.VISA
{

    internal class RetornoLr
    {

        private List<int> chaves;

        public List<int> Chaves
        {
            get { return chaves; }
            set { chaves = value; }
        }
        private string mensagem;
        public void AddChave(Int32 chave)
        {
            chaves.Add(chave);
        }


        public string Mensagem
        {
            get { return mensagem; }
            set { mensagem = value; }
        }

        public RetornoLr(List<Int32> chaves, string mensagem)
        {
            this.chaves = new List<int>(chaves);
            this.Mensagem = mensagem;


        }
    }

    internal class ListaRetornoLr
    {
        public static bool VerificaSucesso(Int32 codigo)
        {
            return (codigo == 0 || codigo == 11);
        }
        public static List<RetornoLr> lista;

        static ListaRetornoLr()
        {
            lista = new List<RetornoLr>();
            List<Int32> tempList;

            /*  
             *
             * Seu processo de pagamento foi finalizado com sucesso!
             *
            */

            tempList = new List<int>();
            tempList.Add(0);
            tempList.Add(11);
            lista.Add(new RetornoLr(tempList, "Seu processo de pagamento foi finalizado com sucesso!"));


            /*
             *   Ocorreu um erro no processo de pagamento. Por favor, tente novamente mais tarde
             * 
             */
            tempList = new List<int>();
            tempList.Add(1);
            tempList.Add(2);
            tempList.Add(15);
            tempList.Add(19);
            tempList.Add(21);
            tempList.Add(28);
            tempList.Add(41);
            tempList.Add(43);
            tempList.Add(51);
            tempList.Add(54);
            tempList.Add(55);
            tempList.Add(57);
            tempList.Add(61);
            tempList.Add(62);
            tempList.Add(63);
            tempList.Add(65);
            tempList.Add(75);
            tempList.Add(82);
            tempList.Add(89);
            tempList.Add(91);
            tempList.Add(93);
            tempList.Add(94);
            tempList.Add(96);
            tempList.Add(98);
            tempList.Add(100);
            tempList.Add(110);
            tempList.Add(120);
            tempList.Add(130);
            tempList.Add(140);
            tempList.Add(150);
            tempList.Add(160);
            tempList.Add(180);
            tempList.Add(299);
            lista.Add(new RetornoLr(tempList, "Ocorreu um erro no processo de pagamento. Por favor, tente novamente mais tarde."));


            /*
             * 
             * Ocorreu um erro no processo de pagamento. Por favor,
             * entre em contato com o organizador do evento e informe o código de erro nºXX.

             * 
             * 
             */
            tempList = new List<int>();
            tempList.Add(3);
            tempList.Add(22);
            tempList.Add(76);
            tempList.Add(77);
            tempList.Add(81);
            tempList.Add(83);
            tempList.Add(85);
            tempList.Add(99);
            tempList.Add(170);
            tempList.Add(194);
            tempList.Add(195);
            tempList.Add(196);
            tempList.Add(197);
            tempList.Add(198);
            tempList.Add(199);
            tempList.Add(200);
            tempList.Add(201);
            tempList.Add(202);
            tempList.Add(203);
            tempList.Add(207);
            tempList.Add(208);
            tempList.Add(209);
            tempList.Add(210);
            tempList.Add(211);
            tempList.Add(212);
            tempList.Add(213);
            tempList.Add(214);
            tempList.Add(215);
            tempList.Add(216);
            tempList.Add(221);
            tempList.Add(228);
            tempList.Add(229);
            tempList.Add(230);
            tempList.Add(232);
            lista.Add(new RetornoLr(tempList, "Ocorreu um erro no processo de pagamento.Por favor, entre em contato com o organizador do evento e informe o código LR abaixo"));


            /*
             * Número do cartão inválido. Por favor, informe corretamente o número de seu cartão.
             * 
             * 
             */
            tempList = new List<int>();
            tempList.Add(25);
            lista.Add(new RetornoLr(tempList, "Número do cartão inválido. Por favor, informe corretamente o número de seu cartão."));

            /*
             * Código de verificação inválido. Por favor, informe corretamente o código de verificação de seu cartão.
             * 
             * 
             */
            tempList = new List<int>();
            tempList.Add(52);
            tempList.Add(230);
            lista.Add(new RetornoLr(tempList, "Código de verificação inválido. Por favor, informe corretamente o código de verificação de seu cartão."));

            /*
             * Cartão inválido para essa operação. Verifique se a bandeira de seu cartão é Visa.
             * 
             * 
             */
            tempList = new List<int>();
            tempList.Add(53);
            lista.Add(new RetornoLr(tempList, "Cartão inválido para essa operação. Verifique se a bandeira de seu cartão é Visa."));


            /*
             * Data de validade incorreta. Por favor, informe corretamente a data de validade de seu cartão
             * 
             * 
             */
            tempList = new List<int>();
            tempList.Add(80);
            lista.Add(new RetornoLr(tempList, "Data de validade incorreta. Por favor, informe corretamente a data de validade de seu cartão"));


            /*
             * Falha de comunicação entre Visanet e banco durante o processo de autenticação. Por favor, tente novamente mais tarde
             * 
             * 
             */
            tempList = new List<int>();
            tempList.Add(100);
            tempList.Add(110);
            tempList.Add(120);
            tempList.Add(130);
            tempList.Add(140);
            tempList.Add(150);
            tempList.Add(160);
            lista.Add(new RetornoLr(tempList, "Falha de comunicação entre Visanet e banco durante o processo de autenticação. Por favor, tente novamente mais tarde"));

        }

        public static String RecuperaMensagemPorCodigo(int codigo)
        {
            RetornoLr retornoLR = lista.Where(x => x.Chaves.Exists(y => y == codigo)).FirstOrDefault();
            if (retornoLR != null)
                return retornoLR.Mensagem;

            return string.Empty;
        }

    }
}
